<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<xsd:schema xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" xmlns:featherweightjava="http://www.emftext.org/language/featherweightjava" xmlns:xsd="http://www.w3.org/2001/XMLSchema" ecore:nsPrefix="featherweightjava" ecore:package="org.emftext.language.featherweightjava" targetNamespace="http://www.emftext.org/language/featherweightjava">  
  <xsd:element ecore:ignore="true" name="NamedElement" type="featherweightjava:NamedElement"/>
  <xsd:element ecore:ignore="true" name="Class" type="featherweightjava:Class"/>
  <xsd:element ecore:ignore="true" name="Member" type="featherweightjava:Member"/>
  <xsd:element ecore:ignore="true" name="Constructor" type="featherweightjava:Constructor"/>
  <xsd:element ecore:ignore="true" name="Parameter" type="featherweightjava:Parameter"/>
  <xsd:element ecore:ignore="true" name="FieldInitialisiation" type="featherweightjava:FieldInitialisiation"/>
  <xsd:element ecore:ignore="true" name="Method" type="featherweightjava:Method"/>
  <xsd:element ecore:ignore="true" name="Field" type="featherweightjava:Field"/>
  <xsd:element ecore:ignore="true" name="Expression" type="featherweightjava:Expression"/>
  <xsd:element ecore:ignore="true" name="ConstructorCall" type="featherweightjava:ConstructorCall"/>
  <xsd:element ecore:ignore="true" name="FieldAccess" type="featherweightjava:FieldAccess"/>
  <xsd:element ecore:ignore="true" name="FieldAccessChild" type="featherweightjava:FieldAccessChild"/>
  <xsd:element ecore:ignore="true" name="ParameterAccess" type="featherweightjava:ParameterAccess"/>
  <xsd:element ecore:ignore="true" name="This" type="featherweightjava:This"/>
  <xsd:element ecore:ignore="true" name="MethodCall" type="featherweightjava:MethodCall"/>
  <xsd:element ecore:ignore="true" name="Cast" type="featherweightjava:Cast"/>
  <xsd:complexType abstract="true" name="NamedElement">
    <xsd:attribute name="name" type="xsd:string" use="required"/>
  </xsd:complexType>
  <xsd:complexType name="Class">
    <xsd:complexContent>
      <xsd:extension base="featherweightjava:NamedElement">
        <xsd:sequence>
          <xsd:element ecore:resolveProxies="true" maxOccurs="unbounded" minOccurs="0" name="members" type="featherweightjava:Member"/>
        </xsd:sequence>
        <xsd:attribute ecore:reference="featherweightjava:Class" name="superclass" type="xsd:anyURI" use="required"/>        
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:complexType abstract="true" name="Member">
    <xsd:complexContent>
      <xsd:extension base="featherweightjava:NamedElement"/>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:complexType name="Constructor">
    <xsd:complexContent>
      <xsd:extension base="featherweightjava:Member">
        <xsd:sequence>
          <xsd:element ecore:resolveProxies="true" maxOccurs="unbounded" minOccurs="0" name="parameters" type="featherweightjava:Parameter"/>
          <xsd:element ecore:resolveProxies="true" maxOccurs="unbounded" minOccurs="0" name="initialisations" type="featherweightjava:FieldInitialisiation"/>
        </xsd:sequence>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:complexType name="Parameter">
    <xsd:complexContent>
      <xsd:extension base="featherweightjava:NamedElement">
        <xsd:attribute ecore:reference="featherweightjava:Class" name="type" type="xsd:anyURI" use="required"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:complexType name="FieldInitialisiation">
    <xsd:attribute ecore:reference="featherweightjava:Field" name="field" type="xsd:anyURI" use="required"/>
    <xsd:attribute ecore:reference="featherweightjava:Parameter" name="parameter" type="xsd:anyURI" use="required"/>
  </xsd:complexType>
  <xsd:complexType name="Method">
    <xsd:complexContent>
      <xsd:extension base="featherweightjava:Member">
        <xsd:sequence>
          <xsd:element ecore:resolveProxies="true" name="returnValue" type="featherweightjava:Expression"/>
          <xsd:element ecore:resolveProxies="true" maxOccurs="unbounded" minOccurs="0" name="parameters" type="featherweightjava:Parameter"/>
        </xsd:sequence>
        <xsd:attribute ecore:reference="featherweightjava:Class" name="returnType" type="xsd:anyURI" use="required"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:complexType name="Field">
    <xsd:complexContent>
      <xsd:extension base="featherweightjava:Member">
        <xsd:attribute ecore:reference="featherweightjava:Class" name="type" type="xsd:anyURI" use="required"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:complexType abstract="true" name="Expression"/>
  <xsd:complexType name="ConstructorCall">
    <xsd:complexContent>
      <xsd:extension base="featherweightjava:Expression">
        <xsd:sequence>
          <xsd:element ecore:resolveProxies="true" maxOccurs="unbounded" minOccurs="0" name="arguments" type="featherweightjava:Expression"/>
        </xsd:sequence>
        <xsd:attribute ecore:reference="featherweightjava:Class" name="type" type="xsd:anyURI" use="required"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:complexType name="FieldAccess">
    <xsd:complexContent>
      <xsd:extension base="featherweightjava:Expression">
        <xsd:sequence>
          <xsd:element ecore:resolveProxies="true" name="expression" type="featherweightjava:FieldAccessChild"/>
        </xsd:sequence>
        <xsd:attribute ecore:reference="featherweightjava:Field" name="field" type="xsd:anyURI" use="required"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:complexType abstract="true" name="FieldAccessChild"/>
  <xsd:complexType ecore:implements="featherweightjava:FieldAccessChild" name="ParameterAccess">
    <xsd:complexContent>
      <xsd:extension base="featherweightjava:Expression">
        <xsd:attribute ecore:reference="featherweightjava:Parameter" name="parameter" type="xsd:anyURI" use="required"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:complexType ecore:implements="featherweightjava:FieldAccessChild" name="This">
    <xsd:complexContent>
      <xsd:extension base="featherweightjava:Expression"/>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:complexType ecore:implements="featherweightjava:FieldAccessChild" name="MethodCall">
    <xsd:complexContent>
      <xsd:extension base="featherweightjava:Expression">
        <xsd:attribute ecore:reference="featherweightjava:Method" name="method" type="xsd:anyURI" use="required"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:complexType ecore:implements="featherweightjava:FieldAccessChild" name="Cast">
    <xsd:complexContent>
      <xsd:extension base="featherweightjava:Expression">
        <xsd:sequence>
          <xsd:element ecore:resolveProxies="true" name="expression" type="featherweightjava:Expression"/>
        </xsd:sequence>
        <xsd:attribute ecore:reference="featherweightjava:Class" name="type" type="xsd:anyURI" use="required"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
</xsd:schema>
